package org.aiforum.service;


import javax.transaction.Transactional;
import javax.transaction.Transactional.TxType;

import org.aiforum.common.CacheContext;
import org.aiforum.common.Response;
import org.aiforum.dao.UserDao;
import org.aiforum.domain.User;
import org.aiforum.util.MD5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
@Transactional(value=TxType.REQUIRED)
public class UserServiceImpl implements UserService{
     
	@Autowired
	private UserDao userDaoImpl;
    //用户注册实现方法
	public Response register(User user) {
		//检查用户是否存在
		Response response=checkAccount(user);
		/*进行判断*/
		if(response.isState()){
			//账户被占用
			response.setState(false);
			return response;
		}
		//密码加密
		user.setPassword(MD5Util.encryptMD5(user.getPassword()));
		
		//保存用户
		user.setState(1);
		userDaoImpl.persist(user);
		response.setState(true);
		response.setMessage("register success");
		//记录注册用户日志
		
		//发生注册信息
		
		//返回
		return response;
	}
    //检查用户实现方法
	public Response checkAccount(User user) {
		Response response=new Response();
		boolean state=null!=userDaoImpl.queryByAccount(user.getAccount());
		if(state){
			response.setState(state);
			response.setMessage("用户已存在!!!");
		}
		return response;
	}
	
	/*
	 * 用户登录实现类
	 */
	public Response login(User user) {
		Response response=new Response();
		
		//检查账号是否存在
	    User olduser=searchByAccount(user.getAccount());
	    if(olduser==null){
	    	response.setMessage("account not exist!!");
	    	return response;
	    }
	    //检查账号是否可用
	    
	    //如果匹配密码成功，表示登录成功
	    if(olduser.getPassword().equals(MD5Util.encryptMD5(user.getPassword()))){
	    	response.setState(true);
	    	response.setMessage("login success");
	    	//记录登录认证信息
	    	long cacheTime=System.currentTimeMillis()+18000; //缓存三分钟
	    	
	    	//CacheContext.setCache(UserSontant.CURRENT_USER, olduser, cacheTime);//记录缓存时间
	    	// 使用用户名加密构建用户缓存KEY
	    	// 1. 该KEY在此作为缓存KEY使用
	    	// 2. 该KEY在用户登录认证拦截器中作为获取用户登录凭证使用
	    	// 3. 该KEY在用户退出时删除用户登录信息时使用
	    	
	    	String cacheKey=MD5Util.encryptMD5(user.getAccount());
	    	//将用户输出到Action中
	    	response.setData(user.getAccount());
	    	
	    	CacheContext.setCache(cacheKey, olduser, cacheTime);

	    	
	    }else{
	    	response.setMessage("password error");
	    }
	    	
	    	
		return response;
	}
	
	/*
	 * 根据用户检查用户实现类
	 */
	public User searchByAccount(String account) {
		return userDaoImpl.queryByAccount(account);
	}
	public void logout(String account) {
		String cacheKey=MD5Util.encryptMD5(account);
		CacheContext.delCache(cacheKey);
	}

}
